package com.wzcl.app.service;

import com.wzcl.app.dao.model.CatalogTask;
import com.wzcl.app.dao.model.WorkShow;
import com.wzcl.app.model.common.MyPage;
import com.wzcl.app.model.common.RVO;
import com.wzcl.app.model.dto.WorkShowDto;
import com.wzcl.app.model.vo.WorkShowDataCountVo;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

public interface WorkShowService {
    /**
     * 添加作品秀
     * @param workShowDto 作品秀对象
     * @return 返回已添加的作品秀
     */
    WorkShow createWorkShow(WorkShowDto workShowDto);

    /**
     * 根据id查询作品秀
     * @param id 作品秀id
     * @return 返回作品秀信息
     */
    WorkShow retrieveWorkShowById(Integer id);

    /**
     * 根据作品秀id删除作品秀
     * @param id 作品秀id
     */
    void deleteWorkShowById(Integer id);

    /**
     * 根据id更新作品秀
     * @param workShowDto 作品秀对象
     */
    void updateWorkShowById(WorkShowDto workShowDto);

    /**
     * 根据条件分页查询作品秀
     * @param workShowDto 作品秀对象
     * @return 返回分页后的作品秀
     */
    MyPage<WorkShow> retrieveAllByUserIdByPage(WorkShowDto workShowDto);


    /**
     * 根据id分页查询作品秀
     * @param workShowDto 作品秀对象
     * @return 返回分页后的作品秀
     */
    MyPage<WorkShow> retrieveAllByUserIdAndGradeByPage(WorkShowDto workShowDto);

    /**
     * 作品秀点赞，取消
     * @param id 作品秀id
     * @return 返回点赞状态
     */
    RVO giveLike(Integer id);

    /**
     * 推送/取消优秀作品
     * @param id 作品秀id
     * @return 返回推送状态
     */
    RVO isPush(Integer id);

    /**
     * 自定义指定作品秀的点赞数
     * @param id 作品秀id
     * @param likeNumber 自定义点赞数
     * @return 返回修改状态
     */
    RVO updateLikeNumber(Integer id, Integer likeNumber);

    /**
     * 优秀作品列表展示
     * @param workShowDto 作品秀对象
     * @return 返回优秀作品分页数据
     */
    MyPage<WorkShow> getPageByExcellent(WorkShowDto workShowDto);

    /**
     * 查询当前教师课程下的所有未点评作品
     * @return 返回所有未点评作品
     */
    List<WorkShow> getPageByNotComment(WorkShowDto workShowDto);

    /**
     * 获取用户作品秀数据统计主页
     * @return 返回作品秀数据统计
     */
    WorkShowDataCountVo getWorkShowDataByUserId(Integer userId);

    /**
     * 作品秀审核
     * @param id 作品秀id
     * @return 返回审核结果
     */
    RVO updateWorkShowByCheckStatus(Integer id, Integer status);
}
